﻿/*
    函数: CustomFunc_AutoAligned(iText,iSplit:="`t",iStrLen:=90,iStrFront:="",iStrBehind:="")
    作用: 文本自动对齐整理
    参数: iHwnd（可选） - 程序的 hwnd
    返回: 
    作者: Kawvin
    版本: 0.1
*/
CustomFunc_AutoAligned(iText,iSplit:="`t",iStrLen:=90,iStrFront:="",iStrBehind:=""){
	MySel:=iText
	LimitMax:=iStrLen     ;左侧超过该长度时，该行不参与对齐，该数字可自行修改
	MaxLen:=0
	StrSpace:=" "
	loop,% LimitMax+1
		StrSpace .=" "
	Aligned:=
	loop, Parse, MySel, `n,`r                   ;首先求得左边最长的长度，以便向它看齐
	{
		;~ IfNotInString,A_loopfield,%iSplit%              ;本行没有换行符，过
			;~ continue
		RegStr:=iSplit . "{1,}"
		RegStr:=RegExReplace(RegStr,"``","\",all)
		TemStr:=RegExReplace(A_loopfield,RegStr,"[==]",all)
		RegStr:="\s*(.*?)\s*\[==\].*$"
		ItemLeft :=RegExReplace(TemStr,RegStr,"$1")        ;本条目的 等号 左侧部分
		ThisLen:=StrLen(RegExReplace(ItemLeft,"[^\x00-\xff]","11"))       ;本条左侧的长度
		MaxLen:=( ThisLen > MaxLen And ThisLen <= LimitMax) ? ThisLen : MaxLen       ;得到小于LimitMax内的最大的长度，这个是最终长度
	}
	loop, Parse, MySel, `n,`r
	{
		;~ IfNotInString,A_loopfield,=
		;~ {
			;~ Aligned .= A_loopfield "`r`n"
			;~ continue
		;~ }
		RegStr:=iSplit . "{1,}"
		RegStr:=RegExReplace(RegStr,"``","\",all)
		TemStr:=RegExReplace(A_loopfield,RegStr,"[==]",all)
		RegStr:="\s*\[==\].*?$"
		ItemLeft:=Trim(RegExReplace(TemStr,RegStr) )        ;本条目的 等号 左侧部分
		RegStr:="^.*?\[==\]"
		ItemRight:=Trim(RegExReplace(TemStr,RegStr)  )          ;本条目的 等号 右侧部分
		
		ThisLen:=StrLen(RegExReplace(ItemLeft,"[^\x00-\xff]","11"))   ;本条左侧的长度
		if ( ThisLen> MaxLen )       ;如果本条左侧大于最大长度，注意是最大长度，而不是LimitMax，则不参与对齐
		{
			Aligned .= ItemLeft  ItemRight "`r`n"
			continue
		}
		else
		{
			Aligned .= ItemLeft . SubStr( StrSpace, 1, MaxLen+2-ThisLen )  ItemRight "`r`n"        ;该处给右侧等号后添加了一个空格，根据需求可删
		}
	}
	Aligned:=RegExReplace(Aligned,"\s*$","")   ;顺便删除最后的空白行，可根据需求注释掉
	if iStrFront!=
		Aligned=iStrFront . "`r`n" . Aligned
	if iStrBehind!=
		Aligned= Aligned . "`r`n" . iStrBehind
	return,Aligned
}